package com.azxcrm.project.system.user.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.azxcrm.project.system.user.domain.User;

/**
 * 用户表 数据层
 * 
 * @author Dustyone
 */
public interface IUserDao
{

    /**
     * 根据条件分页查询用户对象
     * 
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    public List<User> selectUserList(User user);    
    
    /**
     * 根据条件用户名和手机号查询业务员对象
     * 
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    public List<User> selectUser(User user);

    /**
     * 通过用户名查询用户
     * 
     * @param userName 用户名
     * @return 用户对象信息
     */
    public User selectUserByName(String userName);

    /**
     * 通过用户ID查询用户
     * 
     * @param userId 用户ID
     * @return 用户对象信息
     */
    public User selectUserById(Long userId);
    
    /**
     * 通过deptId获取该部门下所有用户信息
     * @param dept
     * @return 部门对象信息
     */
    public List<User> selectUserByDeptId(Long dept);
    
    /**
     * 通过order获取重复订单不重复派单业务员
     * @param dept
     * @return 部门对象信息
     */
    public List<User> selectUserByOrder(@Param("orderId")Integer orderId,@Param("deptId")Integer deptId,@Param("role")String role);

    /**
     * 通过用户ID删除用户
     * 
     * @param userId 用户ID
     * @return 结果
     */
    public int deleteUserById(Long userId);

    /**
     * 批量删除用户信息
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int batchDeleteUser(Long[] ids);

    /**
     * 修改用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    public int updateUser(User user);
    
    /**
     * 根据用户登陆名修改该用户该次登陆来源
     * @param user
     * @return
     */
    public int updateUserByLoginName(User user);
    /**
     * 新增用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    public int insertUser(User user);

    /**
     * 校验用户名称是否唯一
     * 
     * @param loginName 登录名称
     * @return 结果
     */
    public int checkUserNameUnique(String loginName);
    
    /**
	 * 根据用户id查询当前用户信息
	 * @param userId
	 * @return
	 */
	public User selectUserByUserId(Integer userId);
	
	/**
	 * 根据条件用户名,手机号和业务员权限查询业务员对象
	 * @param role
	 * @return
	 */
	public List<User> selectUserBySalesman(@Param("phonenumber")String phonenumber,@Param("role")String role);
}
